destinator,psp: Fix read of unicode strings on Big Endian hosts.
authoroliskoli <oliskoli>
Thu, 8 May 2008 05:40:36 +0000 (05:40 +0000)
committeroliskoli <oliskoli>
Thu, 8 May 2008 05:40:36 +0000 (05:40 +0000)
destinator.c
psp.c

index 59b3c323b2445f0371409e5b3554316a8cda09cf..60a71f232fa381f9edc3af4b214c59507c4cecdd 100644 (file)
@@ -60,17 +60,17 @@ gmsd_init(waypoint *wpt)
 static char *
 read_wcstr(const int discard)
 {
-       short *buff = NULL, c;
+       gbint16 *buff = NULL, c;
        int size = 0, pos = 0;
        
-       while ((c = gbfgetint16(fin))) {
+       while (gbfread(&c, sizeof(c), 1, fin) && (c != 0)) {
                if (size == 0) {
                        size = 16;
-                       buff = xmalloc(size * 2);
+                       buff = xmalloc(size * sizeof(*buff));
                }
                else if (pos == size) {
                        size += 16;
-                       buff = xrealloc(buff, size * 2);
+                       buff = xrealloc(buff, size * sizeof(*buff));
                }
                buff[pos] = c;
                pos += 1;
diff --git a/psp.c b/psp.c
index 387536b862807340692801ddf793461586ac8c42..61d37bbc4ce327ac4d123e857c4ca5b286ef607f 100644 (file)
--- a/psp.c
+++ b/psp.c
@@ -77,18 +77,18 @@ psp_write_str(const char *str)
 static char *
 psp_read_str(gbfile *fin)
 {
-       int i, len;
+       int len;
        gbint16 *buff;
        char *res;
        
        len = (unsigned char)gbfgetc(fin);
        if (len == 0) return NULL;
        
-       buff = xmalloc(len * 2);
-       for (i = 0; i < len; i++)
-               buff[i] = gbfgetint16(fin);
+       buff = xmalloc(len * sizeof(*buff));
+       gbfread(buff, sizeof(*buff), len, fin);
        res = cet_str_uni_to_utf8(buff, len);
        xfree(buff);
+
        return res;
 }